package src.main.BehavioralPatterns.Observer;

import java.util.ArrayList;
import java.util.List;

// 具体主题(Concrete Subject)：实现Subject接口的气象站类
public class WeatherStation implements Subject {
    private List<Observer> observers = new ArrayList<>();// 存储所有观察者
    private float temperature; // 温度数据
    private float humidity; // 湿度数据
    private float pressure; // 气压数据

    // 更新气象数据并出发通知
    public void setMeasurements(float temperature, float humidity, float pressure) {
        this.temperature = temperature;
        this.humidity = humidity;
        this.pressure = pressure;
        measurementsChanged(); // 数据变化时触发
    }

    // 数据变化的处理逻辑
    private void measurementsChanged() {
        notifyObservers(); // 调用通知方法
    }

    // 注册新的注册者
    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    // 移除已注册的观察者
    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    // 通知所有观察者，遍历观察者列表并调用其更新方法
    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            // 将最新数据推送给观察者
            observer.update(temperature, humidity, pressure);      }
    }
}
